/*
 * 上海远境文化传媒有限公司 版权所有
 */
package facade.open;

import java.util.List;
import java.util.Map;

/**
 * 统一API响应包装.
 */
public class ApiResponse {

    /**
     * 返回代码，成功则固定为0，其它值见后面的定义
     */
    public Integer code;

    /**
     * 主数据体，在code=0时才会出现，可以是单个对象，也可以是对象数组 |
     */
    public Object data;

    /**
     * 汇总数据体，在报表类接口，code=0时才会出现，应该是单个对象
     */
    public Object sumary;

    /**
     * 在分页返回数据时出现，每页记录数，默认是20，可通过参数修改
     */
    public Integer pageSize;

    /**
     * 在分页返回数据时出现，当前是第几页，第一页是1，以此类推
     */
    public Integer pageNumber;

    /**
     * 在分页返回数据时出现，总页数
     */
    public Integer totalPage;

    /**
     * 在分页返回数据时出现，总记录数
     */
    public Integer totalCount;

    /**
     * 在分页返回数据时出现，当前页记录数，应<=pageSize
     */
    public Integer pageCount;

    /**
     * 是否有下一页.
     */
    public Boolean hasNextPage;

    /**
     * 是否有上一页.
     */
    public Boolean hasPreviousPage;

    /**
     * 参数验证出错信息.
     */
    public List<KeyMessage> validationErrors;

    /**
     * 在分页返回数据时出现，当前分页查询的参数，以key:value形式出现，用于调用下一页时生成前后页面的链接
     */
    public Map<String, String> pageParams;

    /**
     * 出现这个字段时，以绿色信息提示方式展示此字段内容，显示大约4秒后隐藏，用户可手工隐藏此提示信息
     */
    public String noticeMessage;

    /**
     * 出现这个字段时，以浅红色信息提示方式展示此字段内容，显示大约6秒后隐藏，用户可手工隐藏此提示信息
     */
    public String warnMessage;

    /**
     * 与旧接口兼容的写法.
     */
    public String message;

    /**
     * 定义的跳转方式，由接口定义或系统统一定义，如: BACK/HOME/PROFILE等
     */
    public String redirect;

    public ApiResponse() {
        this.code = 0;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("ApiResponse{");
        sb.append("code=").append(code);
        sb.append(", data=").append(data);
        sb.append(", pageSize=").append(pageSize);
        sb.append(", pageNumber=").append(pageNumber);
        sb.append(", totalPage=").append(totalPage);
        sb.append(", totalCount=").append(totalCount);
        sb.append(", pageCount=").append(pageCount);
        sb.append(", noticeMessage='").append(noticeMessage).append('\'');
        sb.append(", warnMessage='").append(warnMessage).append('\'');
        sb.append(", message='").append(message).append('\'');
        sb.append(", redirect='").append(redirect).append('\'');
        sb.append('}');
        return sb.toString();
    }
}
